前端工程师“应试”指南
本文来自作者 芋头 在 GitChat 上分享「前端工程师“应试”指南」,「阅读原文」查看交流实录
「文末高能」
编辑 | 小野
本文主要分为以下几个部分,希望对还在找工作的同学有切实帮助,所有这些主旨其实都不是在教大家如何取巧,而是如何踏踏实实准备一场面试,将自己的真实水平发挥出来,并且平常多训练自己的学习和总结方式。
如何准备简历
面试前如何准备
面试中注意事项
平常如何学习才能更好的跳槽
常见面试题解析
如何准备简历
准备简历最重要的一点是,如何让你的简历在几十几百封简历中让人眼前一亮,作为一个前端面试官,每天都需要看很多简历,千篇一律的简历建的太多了,很多时候看一封简历的时间可能只有几秒钟,这个看的过程其实核心关注几个点:
工作经历。是否是来自大公司?是的话会重点关注,不是的话看做过的项目类型,如果是较为复杂的项目或者承担核心角色,重点关注,否则继续。
技术经历。这块其实是最稀缺的,因为每个简历基本都有工作经历,但是大部分都是项目罗列,基本差异都不大,这时候如果你在这块没有什么特色,基本你的简历就会被刷掉了。
所谓技术经历,主要是一些能够体现你某方面技术能力的点,这些点其实是面试官核心关注的,在面试的时候他可能会围绕你简历里这些点展开讨论,这样你也可以有针对性的准备这些话题。
而不是罗列一堆和技术无关的项目,让面试官想破脑瓜扣一些偏门的问题来考察你,对于双方来说,这都不是最想要的结果。
在技术经历这方面,可以有这些形式:
描述你在某个项目中起到了什么核心的角色,人员管理,流程协调,或者技术选型,这些都是你的竞争力,而且不一定非要是纯技术的。
描述你掌握的一些特殊技能?服务端开发,客户端开发,小程序开发,图形开发,算法,游戏,人工智能,这些都是加分项。
描述你在项目中做过的思考、解决方案,对于选型引起的问题的思考,对于模块抽象粒度的思考,对于引起性能瓶颈的问题的思考,对于多人协作方式的思考,对于代码维护的思考,对于开发规范的思考,对于开发流程的思考等等,关键是有思考和给出解决方案这个过程,这个是一个工程师正常成长非常重要的素质能力。
其实最关键的不是这些点,面试官关心的也不是你具体做了什么,而是你会去做这些事情,这体现了你对技术的态度、学习总结的方式和态度,而这些软素质其实才是决定一个开发能够走多远的关键。
另外,筛选简历的通常是技术的 Leader,这个也是一个关键点,你的简历应该突出面向这个群体的内容,而不是面向 HR 的内容。
所以尽量将能够体现你的技术能力、软素质、管理能力、学习能力的内容向前提,并且做出简单扼要足够清晰的描述。
· 总结下一个优秀的简历的结构:
基础信息,简单扼要,不要把你的老家在哪 这种事都写出来。
你的核心竞争力,你的优势,你解决过的突出的问题,为什么对方要录用你的关键。引导对方如何面试你的关键,你需要对你这里做出的描述胸有成竹。
你做过的项目,这里不是长篇累牍,也不要把所有项目都罗列出来,核心的几个,以及你在项目中的核心贡献和思考改进。
个人简单总结,你平常如何学习,如何强化能力,对待生活的态度等,简单的一段话描述一下。
· 不需要的:
我使用什么技术做过什么项目,里面用到了哪些库,如果没有什么突出的内容,少罗列基础的东西。
不要放没有内容,只有 fork 的 github 地址,我希望看到的是你给开源项目提过 PR,你切实参与过某个项目,或者你切实拥有持有开源态度的个人项目。
不要放所谓的 “仿饿了么app” “仿QQ空间”之类的项目,并自称为开源项目。
不要放虚假经历
不要放什么技能评级的模块,特别是上面全是精通的那种。
面试前如何准备?
在基于简历准备妥善的前提下,应该如何准备面试呢?
先说最重要的一点,你的简历一定要能够做到引导面试官,这样你的面试可以更容易准备。
例如你描述的项目经验中出现一些特别的解决方案,这会让面试官试图通过你问了解更多你做这个方案的过程和细节,这时候你需要提前准备的就是这个。
将你简历里能够体现你技术能力或者架构能力或者管理能力的点做充分的准备。
什么准备是充分的呢?你需要重新总结梳理这些事情的细节,做到能够流畅描述其中任意一个细节点,你需要准备随时描述方案的结构,用图表流程图等形式将这些方案画在纸上呈现给面试官。
(纸上谈兵终觉浅,面试要求对方画图是一个很好的考察手段)
这其实是面试准备的非常重要的一环:利用一份优秀的简历引导面试官,从而让面试官有针对性的提问,你甚至可以提前猜到面试官到底会问什么问题(我这么干过,而且非常成功)
除此之外,还有两个重要部分:基础和代码。
基础主要是指一些基础姿势,虽然涉及范围很广,但是如果要集中强化也不是不可能,一些最基础的我们就不说了,例如什么循环,数组处理,字符串处理之类的,来说说一些很常见的面试常问的知识点:
JS 特殊概念:闭包,作用域,原型,异步,Promise,递归。不是说记住这些概念,而是切实理解,并且可以熟练运用。
面试官不会问你闭包是什么(如果这样问了,那这个面试官的面试能力值得怀疑),而是可能会给你一个场景题目,让你给出答案。
正则,至少可以用简单的正则语法。
网络,缓存相关,http method,http status code,cookie session 相关,跨域相关,最经典的一个题目:浏览器输入 url 之后发生了什么事情。
常见框架(React,Vue)的使用,分层,周边技术栈,组件通信,组件设计,webpack等。
开发调试相关,网络调试工具,H5 调试方法,静态资源托管,git 代码管理,mock 方法等等。
ES6 ES7 新语法类
其他知识点欢迎补充,对于这些知识点,多去论坛网站上看一些文章或者嚼嚼官方文档。
另外一个重要部分就是写代码的能力,例如我们公司每场面试之前都会有笔试,不管是应届生还是社招,并且我们非常看重这个笔试。
因为里面的代码题可以看出你写代码的习惯,很多同学写代码不注重细节,或者干脆不知道实现的,这种即使有不少的项目经验,我们也会抱有怀疑的态度。(最近还发现很多人无法写出一个简单的完整的递归逻辑,让人很诧异)
对于写代码,除了刷一些网络上常见的代码题,还有就是多去 leecode 之类的刷题网站上刷一刷,不要只看思路,而是要切实的自己写出来。太多同学,思路讲的头头是道,但是一下笔就跪了。
面试中注意事项
除了刚才说的面试前准备之外,面试时应该注意些什么呢?
一场面试,通常是从自我介绍开始的,一定要抓住这个机会,将面试官引导到你擅长的话题上,不要长篇累牍的介绍自己如何进入行业,做了什么项目。
将简历中的能体现你能力和技术的点着重强调,直入主题描述你和你核心竞争力相关的介绍,这个其实也可以提前准备好,背出来,哈哈。
将面试引导到你擅长的领域之后,问题就不太大了,这时候其他都是小问题,例如面试官如果问到你不了解或者无法很好回答的问题,最好直接说你不擅长这个,而不是含含糊糊的给出一个无法满意的答案。
这样除了给面试官增加负面印象,也会给自己造成紧张气氛。其实面试官也不是神,他们对于如何面试也是比较谨慎的,你无法回答,他们可能会觉得是自己的问题太偏门,面试一定要充满自信。
还有一个非常重要的点就是,最后一个环节,向面试官提问,其实这个环节对最终面试的决定非常小,可能只是面试官礼貌客气的问你一句。
不过你可以借此机会多了解一下对方公司团队的工作状态,业务情况,工作方式,技术架构,工作其实是双向选择,你也需要选择一个宽松的环境或者牛逼的团队,发挥最后一个提问环节的价值。
平常如何学习才能更好的跳槽
反思式学习。做项目的时候,时刻带着疑问和反思的态度,让你做完这个项目的时候,能够从中得到一些成长,这些东西是以后写到简历中非常重要核心的内容。
总结。你做过的每一点改进,每一个方案,每一次深入的研究,都应该时常去总结和思考。
每个月,每个季度,每年,时常总结过去,规划未来。至今我仍然会保持每年写年终总结的习惯,平常我也会时常为自己和团队制定总结和规划。
积累。总结要有落地的积累,包括但不限于,各种技术文档,季度年度总结,github 项目,博客等。
这些在面试的时候都是加分项,另外在你要准备面试的时候,你会很快的想起来自己之前到底做过什么思考和方案。否则很多事情你会觉得理所当然,最终变成了普通的项目罗列。
常见面试题解析
本来想介绍一些面试题,但是这里是公共场合,就不过分的暴露面试题了,我会在分享当天在群里解析一些实战的面试题,到时候见。
另外,关于面试,我很久之前从面试官的角度写过一篇文章,可以参考下:如何面试一名前端开发工程师? - 大搜车前端团队专栏 - 前端乱炖(http://www.html-js.com/article/Large-search-front-team-column%202961)
福利
「阅读原文」看交流实录,你想知道的都在这里